<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="https://code.jquery.com/jquery-3.7.1.js"></script>
    <script>
        // new Promise()小括号里是一个回调函数，回调函数里有两个形参，promise还有两个实例方法分别是：.then  .catch;.then是接收封装promise成功的值，.catch是接收promise失败的值
        // new Promise((res, rej) => { //res是成功的参数，rej是失败的参数
        //     var xhr = new XMLHttpRequest()
        //     xhr.open('get', 'https://liu.zzgoodqc.cn/teas');
        //     xhr.send();
        //     xhr.onload = (a) => {
        //         var a = JSON.parse(xhr.response).data
        //         res(a)
        //     }
        //     xhr.onerror = (e) => {
        //         rej(e)
        //     }
        // }).then((a) => { //接收成功返回的值
        //     console.log(a);
        // }).catch((e) => { //接收失败返回的值
        //     console.log(e);
        // })
        //获取所有
        // function get_fn(type, url) {
        //     return new Promise((res, rej) => {
        //         var xhr = new XMLHttpRequest()
        //         xhr.open(type, url);
        //         xhr.send();
        //         xhr.responseType = 'json'
        //         xhr.onload = () => {
        //             res(xhr.response)
        //         }
        //         xhr.onerror = (e) => {
        //             rej(e)
        //         }
        //     })
        // }
        // get_fn('get', 'https://liu.zzgoodqc.cn/teas').then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })
        //添加
        // function post_fn(type, url, ...a) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type,
        //             url: url,
        //             data: {
        //                 name: a[0],
        //                 type: a[1],
        //                 price: a[2],
        //             },
        //             dataType: 'json',
        //             success: (a) => {
        //                 res(a)
        //             },
        //             onerror: (e) => {
        //                 rej(e);
        //             }
        //         })
        //     })
        // }
        // post_fn('post', 'https://liu.zzgoodqc.cn/teas', 1, 2, 3).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })
        //查找
        // function get_fn_dan(type, url, id) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type,
        //             url: url,
        //             data: {
        //                 id: id
        //             },
        //             dataType: 'json',
        //             success: (a) => {
        //                 res(a)
        //             },
        //             onerror: (e) => {
        //                 rej(e);
        //             }
        //         })
        //     })
        // }
        // get_fn_dan('get', 'https://liu.zzgoodqc.cn/teas/12002', 12002).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })
        //修改
        // function put_fn(type, url, ...a) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type,
        //             url: url,
        //             data: {
        //                 name: a[0],
        //                 type: a[1],
        //                 price: a[2],
        //             },
        //             dataType: 'json',
        //             success: (a) => {
        //                 res(a)
        //             },
        //             onerror: (e) => {
        //                 rej(e);
        //             }
        //         })
        //     })
        // }
        // put_fn('put', 'https://liu.zzgoodqc.cn/teas/12002',1,1,1).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })
        //删除
        // function delete_fn(type, url, id) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type,
        //             url: url,
        //             data: {
        //                id:id
        //             },
        //             dataType: 'json',
        //             success: (a) => {
        //                 res(a)
        //             },
        //             onerror: (e) => {
        //                 rej(e);
        //             }
        //         })
        //     })
        // }
        // delete_fn('delete','https://liu.zzgoodqc.cn/teas/12002',12002).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })
        // function fn1() {
        //     return new Promise((res, rej) => {
        //         var a = false
        //         if (a) {
        //             res('成功')
        //         } else {
        //             rej('失败')
        //         }
        //     })
        // }
        // function fn2() {
        //     return new Promise((res, rej) => {
        //         var a = true
        //         if (a) {
        //             res('成功')
        //         } else {
        //             rej('失败')
        //         }
        //     })
        // }
        // function fn3() {
        //     return new Promise((res, rej) => {
        //         var a = false
        //         if (a) {
        //             res('成功')
        //         } else {
        //             rej('失败')
        //         }
        //     })
        // }
        //all(全部) 全部成功才算成功，有一个失败就算失败
        // Promise.all([fn1(), fn2(), fn3()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })

        //any(任何) 全部失败才算失败，与一个成功就算成功
        // Promise.any([fn1(), fn2(), fn3()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })

        //race()比赛 哪一个先执行完毕就返回哪个函数的值  按理说是所写条件中第一个函数的反馈结果
        // Promise.race([fn3(), fn2(), fn1()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })



        //promise
        //promise的使用
        // new Promise((res, rej) => {  //res代表成功，rej代表失败
        //     var a = true
        //     if (a) {
        //         res('成功');
        //     } else {
        //         rej('失败');
        //     }
        // }).then((a) => {            //接收成功后的反馈值
        //     console.log(a);
        // }).catch((e) => {          //接收失败后的反馈值
        //     console.log(e);
        // })

        // //promise封装ajax
        // //获取所有数据
        // function fn(type, url) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type,
        //             url: url,
        //             dataType: 'json',
        //             success: (a) => {
        //                 res(a)
        //             },
        //             onerror: (e) => {
        //                 console.log(e);
        //             }
        //         })
        //     })
        // }
        // fn('get', 'https://liu.zzgoodqc.cn/teas').then(val => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })


        // //promise的方法all()、any()、race()
        // function fn1() {
        //     return new Promise((res, rej) => {
        //         var a = false
        //         if (a) {
        //             res('成功');
        //         } else {
        //             rej('失败');
        //         }
        //     })
        // }
        // function fn2() {
        //     return new Promise((res, rej) => {
        //         var a = true
        //         if (a) {
        //             res('成功');
        //         } else {
        //             rej('失败');
        //         }
        //     })
        // }
        // function fn3() {
        //     return new Promise((res, rej) => {
        //         var a = false
        //         if (a) {
        //             res('成功');
        //         } else {
        //             rej('失败');
        //         }
        //     })
        // }
        // //all()全部，全部成功则反馈成功，有一个失败则反馈失败。
        // Promise.all([fn1(), fn2(), fn3()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })
        // //any()任何，全部失败则反馈失败，有一个成功则反馈成功。
        // Promise.any([fn1(), fn2(), fn3()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })
        // //race()看执行顺序，反馈第一个反馈的值(反馈按执行完的函数的反馈值)
        // Promise.race([fn1(), fn2(), fn3()]).then((val) => {
        //     console.log(val);
        // }).catch((e) => {
        //     console.log(e);
        // })

        //默认函数就是给形参一个初始值
        // function fn4(a,b,c=10){
        //     console.log(a,b,c);
        // }
        // fn4(3,2)
        //数组结构赋值
        // var  arr = [1,2,3]
        // var [a,b,c] = arr
        // console.log(b);
        //对象结构赋值
        // var obj = {
        //     name:'王林',
        //     age:76
        // }
        // var {name,age} =obj
        // console.log(age);

        //用set去重
        // var arr =[1,2,3,4,5,5,5,5]
        // var s = new Set(arr)
        // console.log([...s]);


        //symbol 的值是独一无二的
        // symbol的用法
        // var s = Symbol('1')
        // var s1 = Symbol('1')
        // console.log(s == s1); //反馈结果为false

        //symbol也可以写在对象中
        // var s = Symbol()
        // var obj = {
        //     name: '王林',
        //     age: 90,
        //     [s]: 100
        // }
        // console.log(obj);
        // // 用for...in...循环无法循环出symbol
        // for (let i in obj) {
        //     console.log(i);
        // }//无法得到symbol的值，我们可以借用Reflect.ownKeys()来获取到obj中的键，进行循环来获取键值
        // Reflect.ownKeys(obj).forEach(item =>{
        //     console.log(obj[item]);
        // })
        

        //迭代器
        // var s = [1,2,3]
        // var iter = s[Symbol.iterator]()
        // console.log(iter.next());//返回两个值一个是value，一个是done，其中done是用来表达当前迭代是否停止
        // console.log(iter.next());
        // console.log(iter.next());
        // console.log(iter.next());//如果迭代停止，value是undefined，done的值是true
    </script>
</body>

</html>